les données proviennet du site kaggle : https://www.kaggle.com/datasets/thedevastator/airbnb-prices-in-european-cities
Les donnés donnent le détails des prix des Airbnb en fonction de plusieurs variables et du moment de la semaine. Ainsi on peut voir que les prix moyen des airbnb n’est pas le même la semaine et le weekend
## Warning: le package 'knitr' a été compilé avec la version R 4.1.3
| Prix_moyen | Période |
|---|---|
| 270.86 | Semaine |
| 276.33 | Weekend |
On cherche à quantifier l’influence de plusieurs variables explicatives sur le prix des Airbnb. Et plus précisément qu’elles sont celles qui permettent d’expliquer une différence de prix entre la semaine et le weekend. En effet, on observe une différence de prix des biens entre la semaine et le weekend. Cependant on peut observer que cette différence de prix entre la semaine et le week-end n’est pas la même pour tous les biens. Comme le montre le graphique suivant
# Chargement des packages nécessaires
library(ggplot2)## Warning: le package 'ggplot2' a été compilé avec la version R 4.1.3
library(tidyr)## Warning: le package 'tidyr' a été compilé avec la version R 4.1.3
# Exemple de données
data <- data.frame(
semaine = data_R_bnb$prix_semaine,
weekend = data_R_bnb$prix_weekend
)
# Transformation des données en format long
data_long <- gather(data, key = "prix", value = "valeur")
# Création du boxplot en facettes
ggplot(data_long, aes(x = prix, y = valeur)) +
geom_boxplot() +
facet_grid(. ~ prix, scales = "free_x")+
coord_cartesian(ylim = c(35, 500))+
xlab("moment de la semaine")Sur le Graphique précédent il est clair que les Airbnb sont plus cher le weekend que la semaine. On peut remarquer cependant que la hausse des prix n’est pas exactement partout la même. (Il semblerait que plus le logement est cher la semaine plus ce dernier est cher le weekend). Nous avons fait le choix de limiter la taille du graphique car dans la base de données il existe une trentaine de logements qui sont a plus de 8 000€. Ces données empêchent donc toute représentation du jeu de données.
p <- ggplot(data_R_bnb, aes(x = prix_weekend, y = prix_semaine)) +
geom_point(aes(color = room_type), size = 2.5) +
theme_classic() +
xlab("Prix weekend") +
ylab("Prix semaine") +
labs(color = "Type de chambre") +
scale_color_manual(values = c("#FA8072", "#20B2AA", "#1E90FF"))
ggplotly(p)Nous allons tenter de modéliser le prix des logements par les variables suivantes:
library(corrplot)## Warning: le package 'corrplot' a été compilé avec la version R 4.1.3
## corrplot 0.92 loaded
# Création de variables intermédiaire
variables_num1 <- data_R_bnb[,c("prix_semaine", "person_capacity", "cleanliness_rating","guest_satisfaction_overall","bedrooms", "metro_dist", "dist")]
Varaibles_num2 <- data_R_bnb[,c("prix_weekend", "person_capacity", "cleanliness_rating","guest_satisfaction_overall","bedrooms", "metro_dist", "dist")]
cor_data1 <- cor(variables_num1)
cor_data2 <- cor(Varaibles_num2)
# Définition des paramètres graphiques
layout(matrix(c(1,2), nrow=1, ncol=2))
# Tracage des graphiques
corrplot(cor_data1, method = c("shade"), type = "lower",order="hclust", tl.col="black")
corrplot(cor_data2, method = c("shade"), type = "lower",order="hclust", tl.col="black")rm(cor_data1,cor_data2)A la vue du graphique précédent, on n’observe pas de différence significative entre la corrélation des variables la semaine et le weekends.
On peut réaliser une analyse de variance (ANOVA) pour déterminer si le prix moyen des logements diffère significativement entre les différentes catégories de room_type ou de host_is_superhost
ggplot(data_R_bnb, aes(x=room_type, y=prix_semaine, fill=host_is_superhost)) +
geom_boxplot() +
labs(x="Type de chambre", y="Prix/semaine", fill="Hôte de confiance") +
theme_classic()+
coord_cartesian(ylim = c(35, 500))+ggtitle("Boxplot des prix des chambres en semaine selon les modalités des chambres")ggplot(data_R_bnb, aes(x=room_type, y=prix_weekend, fill=host_is_superhost)) +
geom_boxplot() +
labs(x="Type de chambre", y="Prix/weekend", fill="Hôte de confiance") +
theme_classic()+
coord_cartesian(ylim = c(35, 500))+ggtitle("Boxplot des prix des chambres le weekend selon les modalités des chambres")On remarque que les maison et les appartement entiers dont le propriétaires n’est pas super host ont tendances à être plus cher que ceux dont le propriétaire est super host. Ce qui semble déconcertant. On remaque que les chambres privés semblent ne pas suivre la même loi, puisque les prix sont les quasi les mêmes pour les 2.
library(knitr)
library(broom)## Warning: le package 'broom' a été compilé avec la version R 4.1.3
anova_result <- aov(prix_semaine ~ room_type + host_is_superhost, data=data_R_bnb)
anova_summary <- tidy(anova_result)
kable(anova_summary, digits = 2, caption = "Résultats de l'ANOVA pour les prix de la semaine")| term | df | sumsq | meansq | statistic | p.value |
|---|---|---|---|---|---|
| room_type | 2 | 81985544 | 40992772.2 | 351.15 | 0 |
| host_is_superhost | 1 | 6005806 | 6005805.6 | 51.45 | 0 |
| Residuals | 26324 | 3073069223 | 116740.2 | NA | NA |
tukey_result <- TukeyHSD(anova_result, "room_type")
tukey_summary <- as.data.frame(tukey_result$`room_type`)
kable(tukey_summary, digits = 2, caption = "Comparaison multiple de Tukey pour les prix de la semaine")| diff | lwr | upr | p adj | |
|---|---|---|---|---|
| Private room-Entire home/apt | -113.35 | -123.60 | -103.11 | 0.00 |
| Shared room-Entire home/apt | -179.52 | -238.56 | -120.47 | 0.00 |
| Shared room-Private room | -66.16 | -125.44 | -6.89 | 0.02 |
## Analyse de variance pour les prix du week-end
anova_result <- aov(prix_weekend ~ room_type + host_is_superhost, data=data_R_bnb)
anova_summary <- tidy(anova_result)
kable(anova_summary, digits = 2, caption = "Résultats de l'ANOVA pour les prix du week-end")| term | df | sumsq | meansq | statistic | p.value |
|---|---|---|---|---|---|
| room_type | 2 | 66080378 | 33040188.86 | 416.39 | 0 |
| host_is_superhost | 1 | 8009146 | 8009146.03 | 100.93 | 0 |
| Residuals | 26324 | 2088799673 | 79349.63 | NA | NA |
tukey_result <- TukeyHSD(anova_result, "room_type")
tukey_summary <- as.data.frame(tukey_result$`room_type`)
kable(tukey_summary, digits = 2, caption = "Comparaison multiple de Tukey pour les prix du week-end")| diff | lwr | upr | p adj | |
|---|---|---|---|---|
| Private room-Entire home/apt | -101.53 | -109.98 | -93.09 | 0 |
| Shared room-Entire home/apt | -167.26 | -215.95 | -118.58 | 0 |
| Shared room-Private room | -65.73 | -114.60 | -16.86 | 0 |
#regression semaine
reg1 <- lm(prix_semaine~room_type+person_capacity+host_is_superhost+cleanliness_rating+bedrooms+guest_satisfaction_overall+metro_dist+dist, data = data_R_bnb)
tbl1 <- kable(summary(reg1)$coefficients, caption = "Résumé de la régression linéaire pour la semaine", border = "solid")
# reg lin weekend
reg2 <- lm(prix_weekend~room_type+person_capacity+host_is_superhost+cleanliness_rating+guest_satisfaction_overall+bedrooms+metro_dist+dist, data = data_R_bnb)
tbl2 <- kable(summary(reg2)$coefficients, caption = "Résumé de la régression linéaire pour le weekends", border = "solid")
### Résumé de la régression linéaire pour le premier jeu de données
tbl1| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| (Intercept) | 208.0888913 | 24.9287917 | 8.347332 | 0.0000000 |
| room_typePrivate room | -100.1301521 | 5.1665056 | -19.380633 | 0.0000000 |
| room_typeShared room | -176.1526713 | 24.9145960 | -7.070260 | 0.0000000 |
| person_capacity | 3.7584001 | 2.3031164 | 1.631876 | 0.1027176 |
| host_is_superhostTrue | -36.9849807 | 5.0332327 | -7.348156 | 0.0000000 |
| cleanliness_rating | -4.4837857 | 3.1759480 | -1.411794 | 0.1580223 |
| bedrooms | 85.9268580 | 4.2098371 | 20.410970 | 0.0000000 |
| guest_satisfaction_overall | 0.5108604 | 0.3369012 | 1.516351 | 0.1294426 |
| metro_dist | -31.9233201 | 3.0961241 | -10.310737 | 0.0000000 |
| dist | 6.2195975 | 1.0834416 | 5.740593 | 0.0000000 |
### Résumé de la régression linéaire pour le deuxième jeu de données
tbl2| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| (Intercept) | 237.0565123 | 20.5103482 | 11.5578980 | 0.0000000 |
| room_typePrivate room | -90.7245344 | 4.2507808 | -21.3430281 | 0.0000000 |
| room_typeShared room | -165.4936406 | 20.4986686 | -8.0733849 | 0.0000000 |
| person_capacity | 3.2180134 | 1.8949061 | 1.6982443 | 0.0894735 |
| host_is_superhostTrue | -41.2353827 | 4.1411295 | -9.9575206 | 0.0000000 |
| cleanliness_rating | 1.9060316 | 2.6130348 | 0.7294322 | 0.4657438 |
| guest_satisfaction_overall | -0.2504983 | 0.2771879 | -0.9037127 | 0.3661561 |
| bedrooms | 74.3852759 | 3.4636747 | 21.4758264 | 0.0000000 |
| metro_dist | -32.1767754 | 2.5473590 | -12.6314254 | 0.0000000 |
| dist | 5.9211076 | 0.8914096 | 6.6424095 | 0.0000000 |
Aucune caractéristique ne semblent plus importante que les autres quand il s’agit d’expliquer la différence de prix des Airbnb entre la semaine et le weekend.